﻿using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace ServiceCore.Tool.JD_Pay
{
    #region 提交
    public class Required2CompanyType : ValidationAttribute
    {
        public Required2CompanyType(string CompanyType)
        {

            this.CompanyType = CompanyType;
        }
        public string CompanyType { get; set; }
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)

        {
            var model = (JdmerchantBase)validationContext.ObjectInstance;

            var Array = CompanyType.Split('|');
            if (Array.Contains(model.companyType))
            {
                if (value == null)
                {
                    return new ValidationResult(validationContext.MemberName + "不可为空");

                }
                else if (string.IsNullOrWhiteSpace(value.ToString()))
                {
                    return new ValidationResult(validationContext.MemberName + "不可为空");
                }

            }


            return ValidationResult.Success;
        }
    }
    public class JdmerchantBase
    {



        [Required2CompanyType("E")]
        public string blicUrla { get; set; }// 营业执照照片  MultipartFile 是   企业和个体工商户传营业执照照片，自然人传租赁合同照片
        [Required2CompanyType("E")]
        public string occUrla { get; set; }//银行开户许可证图片   MultipartFile 否   企业商户必传。即（entity中企业类型companyType=企业-E）必传。个体工商户结算给对公账户时必传（entity中企业类型companyType=个体工商户-P，且结算户公私标识priatePublic=1对公）必传）
        [Required2CompanyType("E")]
        public string blicObaUrla { get; set; }//税字号图片   MultipartFile 否   企业商户使用普通五证类营业执照必传，即entity中企业类型companyType=企业-E，且商户证件类型为blicCardType=BLI时必传
        [Required2CompanyType("E")]
        public string blicTrcUrla { get; set; }//组织机构代码证图片   MultipartFile 否   企业商户使用普通五证类营业执照必传，即entity中企业类型companyType=企业-E，且商户证件类型为blicCardType=BLI时必传
        [Required2CompanyType("E|N|P")]
        public string lepUrla { get; set; }//法人身份证信息正面图片 MultipartFile 是   必传
        [Required2CompanyType("E|N|P")]
        public string lepUrlb { get; set; }//法人身份证信息背面图片 MultipartFile 是   必传

        [Required2CompanyType("N")]
        public string lepUrlc { get; set; }//手持法人身份证照片   MultipartFile 否   自然人必传，即entity中的公司性质为companyType=N时必传
        [Required2CompanyType("E|N|P")]
        public string img { get; set; }//经营门店门头照片    MultipartFile 是	
        [Required2CompanyType("E|N|P")]
        public string enterimg { get; set; }//经营门店出入口照片   MultipartFile 是	
        [Required2CompanyType("E|N|P")]
        public string innerimg { get; set; }//经营门店店内照片    MultipartFile 是	

        [Required2CompanyType("N")]
        public string cardPhoto { get; set; }//结算银行卡正面照图片  MultipartFile 是   即entity中的结算户公私标识为priatePublic=0时必传，或priatePublic=3时必传
        public string settleManPhotoFront { get; set; }//结算人身份证正面照   MultipartFile 否   结算给非法人账户必传，即entity中的结算户公私标识为priatePublic=3时必传
        public string settleManPhotoBack { get; set; }//结算人身份证背面照   MultipartFile 否   结算给非法人账户必传，即entity中的结算户公私标识为priatePublic=3时必传
        public string settleProtocol { get; set; }//结算账户指定书图片   MultipartFile 否   结算给非法人账户必传，即entity中的结算户公私标识为priatePublic=3时必传

        [Required2CompanyType("N")]
        public string settleHoldingIDCard { get; set; }// 
        [Required2CompanyType("N")]                                    //结算人手持身份证    MultipartFile 否   结算给非法人账户必传，即entity中的结算户公私标识为priatePublic=3时必传 
        public string settleHoldingBankCard { get; set; }//结算人手持银行卡    MultipartFile 否   开通POS产品且结算给非法人账户必传，即entity中的结算户公私标识为priatePublic=3且productId=404时必传

        [Required2CompanyType("E|N|P")]
        public string companyType { get; set; }
        //公司性质    String（1）	是 企业-E，个体工商户-P，自然人-N。
        //可参考3.1.1.2 企业，3.1.1.3个体工商户，3.1.1.4自然人，查看不同公司性质的必传参数

        [Required2CompanyType("E|N|P")]
        public string serialNo { get; set; } = DateTime.Now.ToString();//请求流水号   String（64）	是 请求唯一标识。（当商户修改入驻信息时，需要传首次入驻成功时的请求流水号）

        [Required2CompanyType("E|N|P")]
        public string agentNo { get; set; } = "000000";//服务商商户号  String（32）	是 例：110770481

        [Required2CompanyType("E|N|P")]
        [EmailAddress]
        [MaxLength(64)]
        public string regEmail { get; set; }//注册邮箱    String（64）	是 一个商户的唯一标识。（入驻成功的商户，注册邮箱唯一，并且不可以修改）

        [Required2CompanyType("E|N|P")]
        [MaxLength(16)]
        public string regPhone { get; set; }//注册手机号   String（16）	是 注册手机号

        public string blicCardType { get; set; } = "ID";//商户证件类型  String（3）	是 企业包含：统一社会信用代码类-USC，普通五证类-BLI，多证合一类-OCI；
                                                        //个体工商户包含：统一社会信用代码类-USC，普通营业执照-BLI //自然人：身份证-ID；
        [Required2CompanyType("E|P")]
        [MaxLength(40)]
        public string blicCompanyName { get; set; }//商户实体名称  String（40）	是 companyType = E / P时填商户实体名称，例如北京某有限公司；
                                                   //companyType=N时填姓名+（自然人），例如：张三（自然人）。参数长度为5-40个字符


        [Required2CompanyType("E|N|P")]
        public string abMerchantName { get; set; } = "天津睿科";//商户简称    String（15）	是 收银台收款方名称，必传，参数长度2-15个字符

        [Required2CompanyType("E|P")]
        public string blicUscc { get; set; }//统一社会信用代码    String（32）	否 企业/个体工商户必传。（统一社会信用代码：一组长度为18位的用于法人和其他组织身份识别的代码）。若统一社会信用代码为15位，商户证件类型blicCardType传普通五证类-BLI。

        [Required2CompanyType("E|P")]
        public string blicObaCardNo { get; set; }//税务登记号   String（50）	否 企业商户使用普通五证类营业执照必传，即entity中的商户证件类型为blicCardType=BLI时必传

        [Required2CompanyType("E|P")]
        public string blicTrcCardNo { get; set; }//组织机构代码  String（32）	否 企业商户使用普通五证类营业执照必传，即entity中的商户证件类型为blicCardType=BLI时必传

        [Required2CompanyType("E|P")]
        public string blicScope { get; set; }//经营范围    String（1000）	否 企业/个体工商户必传，即entity中公司性质blicCardType为（企业-E，个体工商户-P）


        [Required2CompanyType("E|N|P")]
        public string indTwoCode { get; set; } = "053";//行业编码    String（32）	是 必传，可参考5.1行业编码

        [Required2CompanyType("E|P")]
        public string blicProvince { get; set; }//营业地址所在省 String（32）	是 企业/个体工商户必传，例如：山东；自然人若无营业执照则填入联系人所在省，市，区，详细地址。可参考见行政区编码表

        [Required2CompanyType("E|P")]
        public string blicCity { get; set; }//营业地址所在市 String（32）	是 企业/个体工商户必传，例如：青岛；自然人若无营业执照则填入联系人所在省，市，区，详细地址。可参考见行政区编码表

        [Required2CompanyType("E|P")]
        public string blicDistrict { get; set; }//营业地址所在区 String（32）	是 企业/个体工商户必传，例如：青岛；自然人若无营业执照则填入联系人所在省，市，区，详细地址。可参考见行政区编码表



        [Required2CompanyType("E|N|P")]
        public string blicAddress { get; set; }//营业详细地址  String（128）	是 企业/个体工商户必传；自然人若无营业执照则填入联系人所在省，市，区详细地址。
                                               ///可参考见行政区编码表
        [Required2CompanyType("E|N|P")]                             ///
        public string blicLongTerm { get; set; }//营业证件到期日是否为长期    String（8）	是 true为长期，false不是长期，自然人按身份证件填写

        [Required2CompanyType("E|N|P")]
        public string blicValidityStart { get; set; }//营业证件起始日 String（32）	是 日期格式yyyy-mm-dd，自然人按身份证件填写


        public string blicValidityEnd { get; set; } = "长期";//营业证件到期日 String（32）	是 长期直接写长期 ，不是写日期格式yyyy-mm-dd，自然人按身份证件填写

        [Required2CompanyType("E|N|P")]
        public string lepCardType { get; set; } = "ID";//法人证件类型  String（8）	是 身份证-ID，护照-PAS，台胞证-PASTW，港澳居民来往通行证-PASHK【若商户类型为自然人，则法人证件类型必须为身份证-ID】
        [Required2CompanyType("E|N|P")]
        public string lepName { get; set; }//法人证件中姓名 String（32）	是 若商户类型为自然人即companyType = N时，则法人姓名填商户姓名

        [Required2CompanyType("E|N|P")]
        public string lepCardNo { get; set; }//法人证件中号码 String（50）	是 若商户类型为自然人，即companyType=N时，则填商户身份证号

        [Required2CompanyType("E|N|P")]
        public string lepLongTerm { get; set; }//法人证件到期日是否为长期    String（8）	是 true为长期，false不是长期

        [Required2CompanyType("E|N|P")]
        public string lepValidityStart { get; set; }//法人证件起始日 String（32）	是 日期格式yyyy-mm-dd

        public string lepValidityEnd { get; set; } = "长期";//法人证件到期日 String（32）	是 长期直接写长期 ，不是写日期格式yyyy-mm-dd

        [Required2CompanyType("E|N|P")]
        public string contactName { get; set; }//联系人姓名   String（64）	是 必传

        [Required2CompanyType("E|N|P")]
        public string contactPhone { get; set; }//联系人手机号码 String（16）	是 必传

        [Required2CompanyType("E|N|P")]
        [EmailAddress]
        public string contactEmail { get; set; }//联系人电子邮箱 String（64）	是 必传

        [Required2CompanyType("E|N|P")]
        public string contactProvince { get; set; }//联系人省    String（64）	是 必传，例：河北省

        [Required2CompanyType("E|N|P")]
        public string contactCity { get; set; }//联系人市    String（64）	是 必传，例：石家庄市
        [Required2CompanyType("E|N|P")]
        public string contactDistrict { get; set; }//营业地址所在区 String（32）	是 企业/个体工商户必传，例如：青岛；自然人若无营业执照则填入联系人所在省，市，区，详细地址。可参考见行政区编码表


        [Required2CompanyType("E|N|P")]
        public string contactAddress { get; set; }//联系人详细地址 String（256）	是 必传
        [Required2CompanyType("E|N|P")]
        public bool? ifPhyStore { get; set; }//门店是否线下  boolean 是   必传，true/false

        public string storeProvince { get; set; }//门店所在省   String（64）	否 开通线下产品时必传，即ifPhyStore=true时必传。可参考见行政区编码表
        public string storeCity { get; set; }//门店所在市   String（64）	  否 开通线下产品时必传，即ifPhyStore=true时必传。可参考见行政区编码表
        public string storeAddress { get; set; }//门店详细地址  String（256）	否 开通线下产品时必传，即ifPhyStore=true时必传。可参考见行政区编码表。按照省、市、区传。

        [Required2CompanyType("E|N|P")]
        public string storeDistrict { get; set; }//营业地址所在区 String（32）	是 企业/个体工商户必传，例如：青岛；自然人若无营业执照则填入联系人所在省，市，区，详细地址。可参考见行政区编码表


        ///例如：河北省石家庄市长安区中山东路39号
        ///
        [Required2CompanyType("E|N|P")]
        public string settleToCard { get; set; } = "1";//结算是否到卡  String（1）	是 约定固定值传1

        [Required2CompanyType("E|N|P")]
        public string priatePublic { get; set; } = "0";//结算户公私标识 String（1）	是 对公1，对私0，非法人3



        [Required2CompanyType("E|N|P")]
        public string bankName { get; set; }//结算银行名称  String（64）	是 必传
        [Required2CompanyType("E|N|P")]
        public string subBankCode { get; set; }//结算银行支行联行号   String（128）	是 必传
        [Required2CompanyType("E|N|P")]
        public string bankAccountNo { get; set; }//结算银行卡账号 String（64）	是 必传
        [Required2CompanyType("E|N|P")]
        public string bankAccountName { get; set; }//结算账户名   String（64）	是 必传

        [Required2CompanyType("E|N|P")]
        public string settleCardPhone { get; set; }//结算银行卡绑定手机号  String（16）	是 必传

        [Required2CompanyType("E|N|P")]
        public string settlementPeriod { get; set; } = "T1";//结算周期    String（8）	否 工作日结算传：T1；自然日结算：D1。 如果不传则默认为T1结算

        [Required2CompanyType("E|N|P")]
        public string directoryList { get; set; } = "NoSet";//商户授权目录  List<String> 否   授权目录的个数最多为2个。商户对接线下聚合接口中的统一下单接口：微信公众号支付时，需要传该参数。（授权目录格式要求：域名后面一定的加/。比如完整目录为https://jd.sdwd.com/brd/index.php，授权目录传https://jd.sdwd.com/）

        public string miniProgramAppId { get; set; }//小程序APPID    String（64）	否 商户在微信侧的小程序APPID。商户对接线下聚合接口中的统一下单接口：微信小程序支付时，需要传入该参数，格式比如为：wx5669****79a4e001（如传APPID值一定要真实，否则影响商户入驻审核结果）

        public string merchantNo { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。


        public string statewx { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。 
        public string statealipay { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。 
        public string statejd { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。

        public string statewxmsg { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。 
        public string statealipaymsg { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。 
        public string statejdmsg { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。


        public string desKey { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。

        public string mdKey { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。

        public string result { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
        [Required2CompanyType("E|N|P")]
        public string id { get; set; } = "RKid";//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
        [Required2CompanyType("E|N|P")]

        public string createon { get; set; } = DateTime.Now.ToString();//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
        public string updateon { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
        [Required2CompanyType("E|N|P")]
        public string baseuserid { get; set; } = "rkdefaultuser";//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
        public string createby { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
        public decimal rate { get; set; }//商户号	String（64）	否	入驻返回的商户号。需要修改入驻信息时必传。
    }
    #endregion
    #region 通用
    public class Base_result
    {
        public string code { get; set; }
        public string message { get; set; }
    }
    public class FileParameter
    {
        public byte[] File { get; set; }
        public string FileName { get; set; }
        public string ContentType { get; set; }
        public FileParameter(byte[] file) : this(file, null) { }
        public FileParameter(byte[] file, string filename) : this(file, filename, null) { }
        public FileParameter(byte[] file, string filename, string contenttype)
        {
            File = file;
            FileName = filename;
            ContentType = contenttype;
        }
    }
    public class SubBaseModel
    {
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
    }
    #endregion
    #region 3.1 商户入住接口
    /// <summary>
    /// 商户入住主接口
    /// </summary>
    public class EnterSingleMast_Model
    {
        /// <summary>
        /// 服务商商户号 必传
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 报文json  必传
        /// </summary>
        public entity_base entity { get; set; }
        /// <summary>
        /// 营业执照照片 必传
        /// </summary>
        public string blicUrla { get; set; }
        /// <summary>
        /// 银行开户许可证
        /// </summary>
        public string occUrla { get; set; }
        /// <summary>
        /// 税字号图片
        /// </summary>
        public string blicObaUrla { get; set; }
        /// <summary>
        /// 组织机构代码图片
        /// </summary>
        public string blicTrcUrla { get; set; }
        /// <summary>
        /// 法人身份证正面信息 必传
        /// </summary>
        public string lepUrla { get; set; }
        /// <summary>
        /// 法人身份证背面信息 必传
        /// </summary>
        public string lepUrlb { get; set; }
        /// <summary>
        /// 手持法人身份证照片
        /// </summary>
        public string lepUrlc { get; set; }
        /// <summary>
        /// 经营门店门头照片 必传
        /// </summary>
        public string img { get; set; }
        /// <summary>
        /// 经营门店出入口照片  必传
        /// </summary>
        public string enterimg { get; set; }
        /// <summary>
        /// 经营门店店内照片 必传
        /// </summary>
        public string innerimg { get; set; }
        /// <summary>
        /// 结算银行卡正面照图片 必传
        /// </summary>
        public string cardPhoto { get; set; }
        /// <summary>
        /// 结算人身份证正面照
        /// </summary>
        public string settleManPhotoFront { get; set; }
        /// <summary>
        ///  结算人身份证背面照
        /// </summary>
        public string settleManPhotoBack { get; set; }
        /// <summary>
        ///  结算账户指定书图片
        /// </summary>
        public string settleProtocol { get; set; }
        /// <summary>
        /// 结算人手持身份证
        /// </summary>
        public string settleHoldingIDCard { get; set; }
        /// <summary>
        /// 结算人手持银行卡
        /// </summary>
        public string settleHoldingBankCard { get; set; }
    }
    /// <summary>
    /// entity基础表
    /// </summary>
    public class entity_base
    {
        /// <summary>
        /// 公司性质 企业-E，个体工商户-P，自然人-N。 必传
        /// </summary>
        public string companyType { get; set; }
        /// <summary>
        /// 统一社会信用代码 否
        /// </summary>
        public string blicUscc { get; set; }
        /// <summary>
        /// 经营范围 否
        /// </summary>
        public string blicScope { get; set; }
        /// <summary>
        /// 请求流水号
        /// </summary>
        public string serialNo { get; set; }
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 注册邮箱
        /// </summary>
        public string regEmail { get; set; }
        /// <summary>
        /// 注册手机号 
        /// </summary>
        public string regPhone { get; set; }
        /// <summary>
        /// 商户证件类型 
        /// 企业包含：统一社会信用代码类-USC，普通五证类-BLI，多证合一类-OCI;
        /// 个体工商户包含：统一社会信用代码类-USC，普通营业执照-BLI
        /// 自然人：身份证-ID； 
        /// </summary>
        public string blicCardType { get; set; }
        /// <summary>
        /// 注册手机号 companyType=E/P时填商户实体名称，例如北京某有限公司 companyType=N时填姓名+（自然人），例如：张三（自然人）。参数长度为5-40个字符 
        /// </summary>
        public string blicCompanyName { get; set; }
        /// <summary>
        /// 注册手机号 收银台收款方名称，必传，参数长度2-15个字符 
        /// </summary>
        public string abMerchantName { get; set; }

        /// <summary>
        /// 税务登记号 否
        /// </summary>
        public string blicObaCardNo { get; set; }
        /// <summary>
        /// 组织机构代码 否
        /// </summary>
        public string blicTrcCardNo { get; set; }
        /// <summary>
        /// 行业编码 
        /// </summary>
        public string indTwoCode { get; set; }
        /// <summary>
        /// 营业地址所在省 
        /// </summary>
        public string blicProvince { get; set; }
        /// <summary>
        /// 营业地址所在市 
        /// </summary>
        public string blicCity { get; set; }
        /// <summary>
        /// 营业详细地址
        /// </summary>
        public string blicAddress { get; set; }
        /// <summary>
        ///  是否长期 true为长期，false不是长期，自然人按身份证件填写
        /// </summary>
        public string blicLongTerm { get; set; }
        /// <summary>
        /// 营业证件起始日 日期格式yyyy-mm-dd，自然人按身份证件填写
        /// </summary>
        public string blicValidityStart { get; set; }
        /// <summary>
        /// 营业证件到期日 长期直接写长期 ，不是写日期格式yyyy-mm-dd，自然人按身份证件填写
        /// </summary>
        public string blicValidityEnd { get; set; }
        /// <summary>
        /// 法人证件类型
        /// </summary>
        public string lepCardType { get; set; }
        /// <summary>
        /// 法人证件中姓名
        /// </summary>
        public string lepName { get; set; }
        /// <summary>
        /// 法人证件中号码
        /// </summary>
        public string lepCardNo { get; set; }
        /// <summary>
        ///法人证件到期日是否为长期
        /// </summary>
        public string lepLongTerm { get; set; }
        /// <summary>
        /// 法人证件起始日
        /// </summary>
        public string lepValidityStart { get; set; }
        /// <summary>
        /// 法人证件到期日
        /// </summary>
        public string lepValidityEnd { get; set; }
        /// <summary>
        /// 联系人姓名
        /// </summary>
        public string contactName { get; set; }
        /// <summary>
        /// 联系人手机号码
        /// </summary>
        public string contactPhone { get; set; }
        /// <summary>
        /// 联系人电子邮箱
        /// </summary>
        public string contactEmail { get; set; }
        /// <summary>
        /// 联系人省
        /// </summary>
        public string contactProvince { get; set; }
        /// <summary>
        /// 联系人市
        /// </summary>
        public string contactCity { get; set; }
        /// <summary>
        /// 联系人详细地址
        /// </summary>
        public string contactAddress { get; set; }
        /// <summary>
        /// 门店是否线下
        /// </summary>
        public bool ifPhyStore { get; set; }
        /// <summary>
        /// 门店所在省
        /// </summary>
        public string storeProvince { get; set; }
        /// <summary>
        /// 门店所在市 
        /// </summary>
        public string storeCity { get; set; }
        /// <summary>
        /// 门店详细地址 
        /// </summary>
        public string storeAddress { get; set; }
        /// <summary>
        /// 结算是否到卡
        /// </summary>
        public string settleToCard { get; set; }
        /// <summary>
        /// 结算户公私标识  对公1，对私0，非法人3 
        /// </summary>
        public string priatePublic { get; set; }
        /// <summary>
        /// 结算银行名称
        /// </summary>
        public string bankName { get; set; }
        /// <summary>
        /// 结算银行支行联行号
        /// </summary>
        public string subBankCode { get; set; }
        /// <summary>
        /// 结算银行卡账号
        /// </summary>
        public string bankAccountNo { get; set; }
        /// <summary>
        /// 结算账户名
        /// </summary>
        public string bankAccountName { get; set; }
        /// <summary>
        /// 结算银行卡绑定手机号
        /// </summary>
        public string settleCardPhone { get; set; }
        /// <summary>
        /// 结算周期 否 工作日结算传：T1；自然日结算：D1。 如果不传则默认为T1结算
        /// </summary>
        public string settlementPeriod { get; set; }
        /// <summary>
        /// 商户授权目录 否 授权目录的个数最多为2个。商户对接线下聚合接口中的统一下单接口：微信公众号支付时，需要传该参数。（授权目录格式要求：域名后面一定的加/。比如完整目录为https://jd.sdwd.com/brd/index.php，授权目录传https://jd.sdwd.com/）
        /// </summary>
        public List<string> directoryList { get; set; }
        /// <summary>
        /// 小程序APPID 否  商户在微信侧的小程序APPID。商户对接线下聚合接口中的统一下单接口：微信小程序支付时，需要传入该参数，格式比如为：wx5669****79a4e001
        /// </summary>
        public string miniProgramAppId { get; set; }
        /// <summary>
        /// 商户号 否 入驻返回的商户号。需要修改入驻信息时必传
        /// </summary>
        public string merchantNo { get; set; }

    }
    /// <summary>
    /// 返回数据
    /// </summary>
    public class EnterSingleMast_Result
    {
        /// <summary>
        /// 返回编码
        /// </summary>
        public string code { get; set; }
        public string code_msg { get; set; }
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        public string message { get; set; }
        /// <summary>
        /// 返回业务对象
        /// </summary>
        public EnterSingleMast_Result_data data { get; set; }
    }
    public class EnterSingleMast_Result_data
    {
        /// <summary>
        /// 请求流水号
        /// </summary>
        public string serialNo { get; set; }
    }

    #endregion

    #region 3.2 商户开通产品
    /// <summary>
    /// 
    /// </summary>
    public class applySingle_Model : SubBaseModel
    {
        /// <summary>
        /// 报文Json
        /// </summary>
        public applySingle entity { get; set; }
    }
    /// <summary>
    /// 报文项
    /// </summary>
    public class applySingle
    {
        /// <summary>
        /// 请求流水号
        /// </summary>
        public string serialNo { get; set; }
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 产品ID
        /// </summary>
        public string productId { get; set; }
        /// <summary>
        /// 支付工具ID
        /// </summary>
        public string payToolId { get; set; }
        /// <summary>
        /// 手续费类型
        /// </summary>
        public string mfeeType { get; set; }
        /// <summary>
        /// 手续费
        /// </summary>
        public string mfee { get; set; }
        /// <summary>
        /// 阶梯费率
        /// </summary>
        public List<StepFeeInfo> ladderList { get; set; }
        /// <summary>
        /// POS费率
        /// </summary>
        public List<PosStepFeeInfo> posFeeList { get; set; }
    }
    /// <summary>
    /// 京东支付阶梯费率字段
    /// </summary>
    public class StepFeeInfo
    {
        /// <summary>
        /// 阶梯类型
        /// </summary>
        public string type { get; set; }
        /// <summary>
        /// 阶梯下限
        /// </summary>
        public string minVal { get; set; }
        /// <summary>
        /// 阶梯上限
        /// </summary>
        public string maxVal { get; set; }
        /// <summary>
        /// 卡类型
        /// </summary>
        public string cardType { get; set; }
        /// <summary>
        /// 费率
        /// </summary>
        public string fee { get; set; }
        /// <summary>
        /// 单笔收最小手续费
        /// </summary>
        public string minfee { get; set; }
        /// <summary>
        /// 单笔收最大手续费
        /// </summary>
        public string maxfee { get; set; }
    }
    /// <summary>
    /// Pos阶梯
    /// </summary>
    public class PosStepFeeInfo
    {
        /// <summary>
        /// 阶梯类型
        /// </summary>
        public string type { get; set; }
        /// <summary>
        /// 开通pos类型
        /// </summary>
        public string posType { get; set; }
        /// <summary>
        /// 阶梯下限
        /// </summary>
        public string minVal { get; set; }
        /// <summary>
        /// 阶梯上限
        /// </summary>
        public string maxVal { get; set; }
        /// <summary>
        /// 卡类型
        /// </summary>
        public string cardType { get; set; }
        /// <summary>
        /// 费率
        /// </summary>
        public string fee { get; set; }
        /// <summary>
        /// 单笔收最小手续费
        /// </summary>
        public string minfee { get; set; }
        /// <summary>
        /// 单笔收最大手续费
        /// </summary>
        public string maxfee { get; set; }
    }
    /// <summary>
    /// 接收返回结果
    /// </summary>
    public class applySingle_Result : Base_result
    {

    }
    #endregion

    #region 3.3 查询开通状态接口
    /// <summary>
    /// 查询model
    /// </summary>
    public class queryApplySingle_Model : SubBaseModel
    {
        /// <summary>
        /// 报文Json
        /// </summary>
        public queryApplySingle entity { get; set; }
    }
    /// <summary>
    /// 查询
    /// </summary>
    public class queryApplySingle
    {
        public string serialNo { get; set; }
        public string merchantNo { get; set; }
    }
    /// <summary>
    /// 查询结果
    /// </summary>
    public class queryApplySingle_Result : Base_result
    {

        public List<dataList> dataList { get; set; }
    }
    public class dataList
    {
        /// <summary>
        /// 产品编码
        /// </summary>
        public string productNo { get; set; }
        /// <summary>
        /// 状态 0 1待审核 2审核不通过 3审核通过待确认 4已签约
        /// </summary>
        public string status { get; set; }
        /// <summary>
        /// 状态描述
        /// </summary>
        public string statusMsg { get; set; }
        /// <summary>
        /// 失败描述
        /// </summary>
        public string resultMsg { get; set; }
    }
    #endregion

    #region 3.4商户支付密钥查询
    /// <summary>
    /// 查询入参
    /// </summary>
    public class queryMerchantKeys
    {
        /// <summary>
        /// 请求流水号
        /// </summary>
        public string serialNo { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
    }
    /// <summary>
    /// 接收返回结果
    /// </summary>
    public class queryMerchantKeys_result : Base_result
    {
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        ///  商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 返回业务对象 产品开通状态为审核通过和已签约时才有值
        /// </summary>
        public queryMerchantKeys_result_data data { get; set; }
    }
    public class queryMerchantKeys_result_data
    {
        public string desKey { get; set; }
        public string mdKey { get; set; }
    }
    #endregion

    #region 3.5 下载对账单
    public class JD_download
    {
        /// <summary>
        /// 请求流水号
        /// </summary>
        public string serialNo { get; set; }
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 日期
        /// </summary>
        public string billDate { get; set; }
    }

    /// <summary>
    /// 接收返回结果
    /// </summary>
    public class JD_download_result : Base_result
    {
        /// <summary>
        /// 返回业务对象 产品开通状态为审核通过和已签约时才有值
        /// </summary>
        public JD_download_result_data data { get; set; }
    }
    public class JD_download_result_data
    {
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 日期
        /// </summary>
        public string billDate { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 文件路径
        /// </summary>
        public string path { get; set; }
    }
    #endregion

    #region 3.6 服务商查询商户结算状态接口

    public class queryMerchantsSettle
    {
        /// <summary>
        /// 代理商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 要查询的页码
        /// </summary>
        public int pageNum { get; set; } = 1;
        /// <summary>
        /// 每页的数量
        /// </summary>
        public int pageSize { get; set; } = 10;
        /// <summary>
        /// 查询开始时间
        /// </summary>
        public string queryStartTime { get; set; }
        /// <summary>
        /// 查询结束时间
        /// </summary>
        public string queryEndTime { get; set; }
        /// <summary>
        /// 查询结算状态
        /// </summary>
        public string orderStatus { get; set; }
    }


    /// <summary>
    /// 接收返回结果
    /// </summary>
    public class queryMerchantsSettle_result : Base_result
    {
        /// <summary>
        ///  返回总数
        /// </summary>
        public long total { get; set; }
        /// <summary>
        ///  每页数量
        /// </summary>
        public int pageSize { get; set; }
        /// <summary>
        ///  要查询的页码
        /// </summary>
        public int pageNum { get; set; }

        public object dataList { get; set; }
    }
    public class queryMerchantsSettle_result_datalist
    {
        /// <summary>
        /// 结算时间
        /// </summary>
        public string settleDate { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 商户名称
        /// </summary>
        public string merchantName { get; set; }
        /// <summary>
        /// 结算类型
        /// </summary>
        public string settleType { get; set; }
        /// <summary>
        /// 结算手续费
        /// </summary>
        public decimal settleFee { get; set; }
        /// <summary>
        /// 结算金额
        /// </summary>
        public decimal settlementAmount { get; set; }
        /// <summary>
        /// 结算账户
        /// </summary>
        public string settleAccountNo { get; set; }
        /// <summary>
        /// 结算状态
        /// </summary>
        public string orderStatus { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string remark { get; set; }
    }
    #endregion
    #region  3.7 服务商查询商户微信子商编接口
    public class queryMerchantWXNo
    {
        /// <summary>
        /// 服务商商户号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 产品编码
        /// </summary>
        public string productCode { get; set; } = "401";
    }
    #endregion

    public class ApplySingleParms
    {
        public JdmerchantBase Params { get; set; }

        public string Keyid { get; set; }
    }

    #region 用于队列处理的model

    [BsonIgnoreExtraElements]
    public class JD_data_model
    {
        /// <summary>
        /// 提交keyid
        /// </summary>
        public string KeyId { get; set; }
        /// <summary>
        /// 用户ID
        /// </summary>
        public string userid { get; set; }
        /// <summary>
        /// 商户号
        /// </summary>
        public string merchantNo { get; set; }

        public string desKey { get; set; }

        public string mdKey { get; set; }

        public queryMerchantKeys_result KeyResult { get; set; }

        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime add_time { get; set; }
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime? update_time { get; set; }
        public JdmerchantBase Subinfo { get; set; }
        /// <summary>
        ///  自然人资料返回结果
        /// </summary>
        public EnterSingleMast_Result EnterSingle_result { get; set; }
        /// <summary>
        /// 需要应用的产品列表
        /// </summary>
        public string[] ApplyList { get; set; }
        /// <summary>
        /// 应用产品列表返回结果
        /// </summary>
        public List<ApplyResultList> ApplyResultList { get; set; }
        /// <summary>
        /// 提交的产品是否都审核了  如果存在未审核 则这里是false 这也是判断是否审核通过的搜索基础
        /// </summary>
        public bool Apply_IsAudit { get; set; }
        /// <summary>
        /// 对应提交应用的处理结果查询
        /// </summary>
        public List<ApplySingleQueue> Applyresult { get; set; }
        /// <summary>
        /// 是否成功提交到京东
        /// </summary>
        public EnterState EnterState { get; set; }
    }

    public enum EnterState
    {
        提交中 = 0,
        提交成功 = 1,
        提交失败 = 2
    }
    public class ApplyResultList : applySingle_Result
    {
        public string pid { get; set; }

    }
    public class SubParams
    {
        public string baseuserid { get; set; }
        public EnterSingleMast_Model subdata { get; set; }
    }
    public class ApplySingleQueue
    {
        /// <summary>
        /// 实时查询结果
        /// </summary>
        public dataList queryApplySingle { get; set; }
    }
    #endregion
    #region 3.7        
    /// <summary>
    /// 接收返回结果
    /// </summary>
    public class queryMerchantWXNo_result : Base_result
    {

        public queryMerchantWXNo_result_item data { get; set; }
 
    }
    public class queryMerchantWXNo_result_item
    {
        /// <summary>
        /// 聚合商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 合利宝侧商户号
        /// </summary>
        public string merchantId { get; set; }
        /// <summary>
        /// 商户信息
        /// </summary>
        public merchantInfoVo merchantInfoVo { get; set; }

        public string hlbWxSubNoResultInfo { get; set; }

        public hlbWxSubNoResultInfo hlbWxSubNoResultInfo_obj
        {
            get
            {
                try
                {
                    return Newtonsoft.Json.JsonConvert.DeserializeObject<hlbWxSubNoResultInfo>(hlbWxSubNoResultInfo);
                }
                catch
                {
                    return new hlbWxSubNoResultInfo();
                }
            }
        }
    }

    public class merchantInfoVo
    {
        /// <summary>
        /// 聚合商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 代理商号
        /// </summary>
        public string agentNo { get; set; }
        /// <summary>
        /// 商户名称
        /// </summary>
        public string merchantName { get; set; }
    }
    public class hlbWxSubNoResultInfo
    {
        /// <summary>
        /// WXPAY-微信支付
        /// </summary>
        public string appPayType { get; set; }
        /// <summary>
        /// 合利宝侧商户号
        /// </summary>
        public string merchantNo { get; set; }
        /// <summary>
        /// 报备结果 DOING-报备中   FAIL-失败 SUCCESS-成功

        /// </summary>
        public string status { get; set; }
        public string status_str
        {
            get
            {
                switch (status)
                {
                    case "DOING": return "报备中";
                    case "FAIL": return "失败";
                    case "SUCCESS": return "成功";
                    default: return "unknow";
                }
            }
        }
        /// <summary>
        /// 当报备结果为DOING、FAIL 时可返回  注：此字段只作为报备失败的参考，不能作为判断最终报备结果的依据 
        /// </summary>
        public string reportFailedReason { get; set; }
        /// <summary>
        /// 报备状态 INIT-初始化     SUBMIT-待审核 REJECT-拒绝 PASS-通过 ABNORMAL-处理中 
        /// </summary>
        public string weChantStatus { get; set; }
        public string weChantStatus_str
        {
            get
            {
                switch (weChantStatus)
                {
                    case "INIT": return "初始化";
                    case "SUBMIT": return "待审核";
                    case "REJECT": return "拒绝";
                    case "PASS": return "通过";
                    case "ABNORMAL": return "处理中";
                    default: return "unknow";
                }
            }
        }

        public List<threePartnerNoData> threePartnerNoData { get; set; }
    }
    public class threePartnerNoData
    {
        /// <summary>
        /// 微信平台渠道号
        /// </summary>
        public string channelMerchantNo { get; set; }
        /// <summary>
        /// 微信子商编
        /// </summary>
        public string threePartnerNo { get; set; }
        /// <summary>
        /// 62001-乐摇摇信息银联线下 62002-乐摇摇信息网联线下
        /// </summary>
        public string channelShortId { get; set; }
    }
    #endregion
}